Настройка CoDeSys для PRU программирования
В двух словах: нужно загрузить .prg и .exp файлы, и добавить библиотеку pruAccessLib.lib.
Этот файл можно взять в архиве pack1.zip на форуме ОВЕН
Подготовка контроллера
Контроллер ПЛК110 М02, купленый в январе 2016-го заработал сразу. Прошивку обновлять не требовалось.
Перед использованием PRU ядер их нужно перевести в режим свободного программирования. Подготовку достаточно выполнить 1 раз, она не потеряется при перезагрузках.
Для этого нужно:
-
Загрузить файл
PRU0.prgв контроллер (иPRU1.prg, если требуется) через CoDeSys менюOnline>Write file to PLC -
Перезагрузить ПЛК: выключить и включить питание ПЛК
Импорт .exp кода в CoDeSys проект
Hardella IDE генерирует стандартный .exp файл, который загружается в CoDeSys через меню Project > Import...

При этом в проект загружаются следующие сущности:

- Программы настройки PRU ядер (
PROGRAM BlinkningLeds_Pru0InitиPROGRAM BlinkningLeds_Pru1Init) - Программы обмена данными с PRU ядрами (
PROGRAM BlinkningLeds_Pru0MemoryTransferиPROGRAM BlinkningLeds_Pru1MemoryTransfer) - Перечисления (
ENUM), если они использовались
Нужно добавить библиотеку pruAccessLib.lib, иначе в CoDeSys возникнут ошибки похожие на
Error 4001: BlinkningLeds_Pru0MemoryTransfer (2): Identifier 'PRU_FB_GET_PARAMETER' not defined
Настройка PRU ядра
По умолчанию, PRU ядра “в режиме свободного программирования” остановлены. Т.е. они вообще ничего не делают. Для того, чтобы загрузить программу, нужно вызвать соответствующую программу.
Для этого в PLC_PRG добавим следующий код:
BlinkningLeds_Pru0Init(); (* загрузка кода в PRU0 *)
BlinkningLeds_Pru1Init(); (* загрузка кода в PRU1 *)
(* PRU запущены, можно обмениваться данными *)
BlinkningLeds_Pru0MemoryTransfer(BLINK_3_4_enable:=TRUE);
BlinkningLeds_Pru1MemoryTransfer(BLINK_1_2_enable:=TRUE);

В целом, можно менять PRU программы на ходу, но делать это нужно только тогда, когда оборудование находится в безопасном состоянии. Явно не стоит заменять программу сверления во время самого сверления.
В целом, можно вызывать BlinkningLeds_Pru0Init(); хоть в каждом основном цикле ПЛК. В программе Init есть защита от повторных запусков.
Комментировать